package it.azienda.managerworkstandard.modello;

import it.azienda.framework.modello.BeanBase;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import javax.faces.model.SelectItem;
import org.hibernate.Session;

/**
 *
 * @author MCignarale
 */

public class BeanResoFornitore extends BeanBase{
    
    public BeanResoFornitore() {
        this.beanFornitore = new BeanFornitore();
        this.totale = new Double(0);
        this.iva = new Double(0);
        this.imponibile = new Double(0);
        this.dataReso = new Date(System.currentTimeMillis());
        this.beanProdottoDettLookup=new BeanProdottoDett();
        this.beanProdottoDettLookupRest=new BeanProdottoDett();
        this.peso = new Double(0);
        this.colli = new Double(0);
    }
    
    private Integer id;
    private Integer codice;
    private java.util.Date dataReso;
    private BeanFornitore beanFornitore = new BeanFornitore();
    private String note;
    
    private Double totale = new Double(0);
    private Double imponibile = new Double(0);
    private Double iva = new Double(0);
    private java.util.Date dataTrasporto;
    private String pagato = "N";
    private Double peso = new Double(0);
    private Double colli = new Double(0);
    private Integer minuti;
    private Integer ora;
    
    //Dati Prodotto
    private BeanProdottoDett beanProdottoDett = new BeanProdottoDett();
    private BeanProdottoDett beanProdottoDettLookup = new BeanProdottoDett();
    private java.lang.Integer idProdottoDett;
    private SelectItem[] listaProdottoDett;
    private ArrayList listaProdotti;
    private ArrayList listaProdottiLookup;
    
    private ArrayList listaProdottiRest;
    private BeanProdottoDett beanProdottoDettLookupRest = new BeanProdottoDett();
    private java.lang.Integer idProdottoDettRest;
    private SelectItem[] listaProdottoDettRest;
    private ArrayList listaProdottiLookupRest;
    
    private String codiceProdDett;
    private String descProdDett;
    private String barCodeProdDett;
    private Double prezzoVenditaProdDett;
    private Double prezzoFinaleProdDett;
    private Double ivaProdDett;
    private Integer umProdDett;
    private Double quantitaProdDett;
    private Double scontoProdDett;
    private Double prezzoIvaProdDett;
    private Double prezzoAcquistoUtile;
    private Integer idProdotto;
    
    private Set resoFornitoreDet = new HashSet();
    
    private SelectItem[] ordinamento;
    
    public SelectItem[] getOrdinamento() {
        ordinamento = new SelectItem[4];
        ordinamento[0] = new SelectItem("", "");
        ordinamento[1] = new SelectItem("codice", "Codice");
        ordinamento[2] = new SelectItem("dataReso", "Data Reso");
        ordinamento[3] = new SelectItem("totale", "Importo");
        return ordinamento;
    }
    
    public void setOrdinamento(SelectItem[] ordinamento) {
        this.ordinamento = ordinamento;
    }
    
    public Integer getId() {
        return id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    
    public Integer getCodice() {
        return codice;
    }
    
    public void setCodice(Integer codice) {
        this.codice = codice;
    }
    
    public java.util.Date getDataReso() {
        return dataReso;
    }
    
    public void setDataReso(java.util.Date dataReso) {
        this.dataReso = dataReso;
    }
    
    public BeanFornitore getBeanFornitore() {
        return beanFornitore;
    }
    
    public void setBeanFornitore(BeanFornitore beanFornitore) {
        this.beanFornitore = beanFornitore;
    }
    
    public String getNote() {
        return note;
    }
    
    public void setNote(String note) {
        this.note = note;
    }
    
    public Double getTotale() {
        return totale;
    }
    
    public void setTotale(Double totale) {
        this.totale = totale;
    }
    
    public Set getResoFornitoreDet() {
        return resoFornitoreDet;
    }
    
    public void setResoFornitoreDet(Set resoFornitoreDet) {
        this.resoFornitoreDet = resoFornitoreDet;
    }
    
    public BeanProdottoDett getBeanProdottoDett() {
        return beanProdottoDett;
    }
    
    public void setBeanProdottoDett(BeanProdottoDett beanProdottoDett) {
        this.beanProdottoDett = beanProdottoDett;
    }
    
    public BeanProdottoDett getBeanProdottoDettLookup() {
        return beanProdottoDettLookup;
    }
    
    public void setBeanProdottoDettLookup(BeanProdottoDett beanProdottoDettLookup) {
        this.beanProdottoDettLookup = beanProdottoDettLookup;
    }
    
    public BeanProdottoDett getBeanProdottoDettLookupRest() {
        return beanProdottoDettLookupRest;
    }
    
    public void setBeanProdottoDettLookupRest(BeanProdottoDett beanProdottoDettLookupRest) {
        this.beanProdottoDettLookupRest = beanProdottoDettLookupRest;
    }
    
    public SelectItem[] getListaProdottoDett() {
        Session nuovaSessione = null;
        if(this.listaProdottiLookup!=null){
            
            listaProdottoDett = new SelectItem[this.listaProdottiLookup.size()];
            BeanProdottoDett item = new BeanProdottoDett();
            listaProdottoDett = new SelectItem[this.listaProdottiLookup.size()+1];
            listaProdottoDett[0] =  new SelectItem("","");
            for(int i=0; i<this.listaProdottiLookup.size(); i++) {
                item = (BeanProdottoDett)this.listaProdottiLookup.get(i);
                listaProdottoDett[i+1] = new SelectItem(item.getId().toString(),item.getCodice()+" - "+item.getDescrizioneBreve());
            }
        }
        if(listaProdottoDett==null){
            listaProdottoDett = new SelectItem[1];
            listaProdottoDett[0] = new SelectItem("", "");
        }
        
        return listaProdottoDett;
    }
    
    public void setListaProdottoDett(SelectItem[] listaProdottoDett) {
        this.listaProdottoDett = listaProdottoDett;
    }
    
    public SelectItem[] getListaProdottoDettRest() {
        Session nuovaSessione = null;
        if(this.listaProdottiLookupRest!=null){
            listaProdottoDettRest = new SelectItem[this.listaProdottiLookupRest.size()];
            BeanProdottoDett item = new BeanProdottoDett();
            listaProdottoDettRest = new SelectItem[this.listaProdottiLookupRest.size()+1];
            listaProdottoDettRest[0] =  new SelectItem("","");
            for(int i=0; i<this.listaProdottiLookupRest.size(); i++) {
                item = (BeanProdottoDett)this.listaProdottiLookupRest.get(i);
                listaProdottoDettRest[i+1] = new SelectItem(item.getId().toString(),item.getCodice()+" - "+item.getDescrizioneBreve());
            }
        }
        if(listaProdottoDettRest==null){
            listaProdottoDettRest = new SelectItem[1];
            listaProdottoDettRest[0] = new SelectItem("", "");
        }
        
        return listaProdottoDettRest;
    }
    
    public void setListaProdottoDettRest(SelectItem[] listaProdottoDettRest) {
        this.listaProdottoDettRest = listaProdottoDettRest;
    }
    
    public Integer getIdProdottoDett() {
        Integer ritorno = null;
        if (this.getBeanProdottoDett() != null) {
            ritorno = this.getBeanProdottoDett().getId();
        }
        return ritorno;
    }
    
    public void setIdProdottoDett(Integer idProdottoDett) {
        this.idProdottoDett = idProdottoDett;
        BeanProdottoDett beanProdottoDett = null;
        if (idProdottoDett != null) {
            beanProdottoDett = new BeanProdottoDett();
            try {
                beanProdottoDett = (BeanProdottoDett)beanProdottoDett.dettaglio(idProdottoDett);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        this.setBeanProdottoDett(beanProdottoDett);
    }
    
    public Integer getIdProdottoDettRest() {
        Integer ritorno = null;
        if (this.getBeanProdottoDett() != null) {
            ritorno = this.getBeanProdottoDett().getId();
        }
        return ritorno;
    }
    
    public void setIdProdottoDettRest(Integer idProdottoDettRest) {
        this.idProdottoDettRest = idProdottoDettRest;
        BeanProdottoDett beanProdottoDett = null;
        if (idProdottoDettRest != null) {
            beanProdottoDett = new BeanProdottoDett();
            try {
                beanProdottoDett = (BeanProdottoDett)beanProdottoDett.dettaglio(idProdottoDettRest);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        this.setBeanProdottoDett(beanProdottoDett);
    }
    
    public ArrayList getListaProdotti() {
        return listaProdotti;
    }
    
    public void setListaProdotti(ArrayList listaProdotti) {
        this.listaProdotti = listaProdotti;
    }
    
    public ArrayList getListaProdottiLookup() {
        return listaProdottiLookup;
    }
    
    public void setListaProdottiLookup(ArrayList listaProdottiLookup) {
        this.listaProdottiLookup = listaProdottiLookup;
    }
    
    public ArrayList getListaProdottiLookupRest() {
        return listaProdottiLookupRest;
    }
    
    public void setListaProdottiLookupRest(ArrayList listaProdottiLookupRest) {
        this.listaProdottiLookupRest = listaProdottiLookupRest;
    }
    
    public String getCodiceProdDett() {
        return codiceProdDett;
    }
    
    public void setCodiceProdDett(String codiceProdDett) {
        this.codiceProdDett = codiceProdDett;
    }
    
    public String getDescProdDett() {
        return descProdDett;
    }
    
    public void setDescProdDett(String descProdDett) {
        this.descProdDett = descProdDett;
    }
    
    public String getBarCodeProdDett() {
        return barCodeProdDett;
    }
    
    public void setBarCodeProdDett(String barCodeProdDett) {
        this.barCodeProdDett = barCodeProdDett;
    }
    
    public Double getPrezzoVenditaProdDett() {
        return prezzoVenditaProdDett;
    }
    
    public void setPrezzoVenditaProdDett(Double prezzoVenditaProdDett) {
        this.prezzoVenditaProdDett = prezzoVenditaProdDett;
    }
    
    public Double getPrezzoFinaleProdDett() {
        return prezzoFinaleProdDett;
    }
    
    public void setPrezzoFinaleProdDett(Double prezzoFinaleProdDett) {
        this.prezzoFinaleProdDett = prezzoFinaleProdDett;
    }
    
    public Double getIvaProdDett() {
        return ivaProdDett;
    }
    
    public void setIvaProdDett(Double ivaProdDett) {
        this.ivaProdDett = ivaProdDett;
    }
    
    public Integer getUmProdDett() {
        return umProdDett;
    }
    
    public void setUmProdDett(Integer umProdDett) {
        this.umProdDett = umProdDett;
    }
    
    public Double getQuantitaProdDett() {
        return quantitaProdDett;
    }
    
    public void setQuantitaProdDett(Double quantitaProdDett) {
        this.quantitaProdDett = quantitaProdDett;
    }
    
    public Double getScontoProdDett() {
        return scontoProdDett;
    }
    
    public void setScontoProdDett(Double scontoProdDett) {
        this.scontoProdDett = scontoProdDett;
    }
    
    public Double getPrezzoIvaProdDett() {
        return prezzoIvaProdDett;
    }
    
    public void setPrezzoIvaProdDett(Double prezzoIvaProdDett) {
        this.prezzoIvaProdDett = prezzoIvaProdDett;
    }
    
    public Integer getIdProdotto() {
        return idProdotto;
    }
    
    public void setIdProdotto(Integer idProdotto) {
        this.idProdotto = idProdotto;
    }
    
    public Double getPrezzoAcquistoUtile() {
        return prezzoAcquistoUtile;
    }
    
    public void setPrezzoAcquistoUtile(Double prezzoAcquistoUtile) {
        this.prezzoAcquistoUtile = prezzoAcquistoUtile;
    }
    
    public ArrayList getListaProdottiRest() {
        return listaProdottiRest;
    }
    
    public void setListaProdottiRest(ArrayList listaProdottiRest) {
        this.listaProdottiRest = listaProdottiRest;
    }
    
    public java.util.Date getDataTrasporto() {
        return dataTrasporto;
    }
    
    public void setDataTrasporto(java.util.Date dataTrasporto) {
        this.dataTrasporto = dataTrasporto;
    }
    
    public String getPagato() {
        return pagato;
    }
    
    public void setPagato(String pagato) {
        this.pagato = pagato;
    }
    
    public Double getPeso() {
        return peso;
    }
    
    public void setPeso(Double peso) {
        this.peso = peso;
    }
    
    public Double getColli() {
        return colli;
    }
    
    public void setColli(Double colli) {
        this.colli = colli;
    }
    
    public HashMap parametriReso(BeanConfigurazione configurazione, BeanResoFornitore resoFornitore) {
        HashMap parametri = new HashMap();
        Integer numProdotti = new Integer(0);
        if(resoFornitore.getListaProdotti() != null){
            numProdotti = new Integer(resoFornitore.getListaProdotti().size());
        }
        parametri.put("0", numProdotti.toString());
        parametri.put("1", "");
        parametri.put("2", "");
        parametri.put("3", "");
        parametri.put("4", "");
        parametri.put("5", "");
        parametri.put("6", "");
        parametri.put("7", "");
        parametri.put("8", resoFornitore.getBeanFornitore().getRagioneSociale());
        parametri.put("9", resoFornitore.getBeanFornitore().getIndirizzo());
        if(resoFornitore.getBeanFornitore().getBeanComuneResidenza() != null) {
            if(resoFornitore.getBeanFornitore().getBeanComuneResidenza().getId() != null){
                parametri.put("10", resoFornitore.getBeanFornitore().getBeanComuneResidenza().getCap() + "-" + resoFornitore.getBeanFornitore().getBeanComuneResidenza().getDescrizione());
            }
        } else {
            parametri.put("10", "");
        }
        
        if(resoFornitore.getBeanFornitore().getBeanComuneResidenza().getBeanProvincia() != null) {
            if(resoFornitore.getBeanFornitore().getBeanComuneResidenza().getBeanProvincia().getId() != null){
                parametri.put("11", "(" + resoFornitore.getBeanFornitore().getBeanComuneResidenza().getBeanProvincia().getSigla() + ") Italia ");
            }else{
                parametri.put("11", "");
            }
        } else {
            parametri.put("11", "");
        }
        
        String telCliente="Tel.";
        if(resoFornitore.getBeanFornitore()!=null){
            if(resoFornitore.getBeanFornitore().getTelefono()!=null){
                if(resoFornitore.getBeanFornitore().getTelefono().length()>1){
                    telCliente+=" "+resoFornitore.getBeanFornitore().getTelefono()+" -";
                }
            }
            if(resoFornitore.getBeanFornitore().getCellulare()!=null){
                if(resoFornitore.getBeanFornitore().getCellulare().length()>1){
                    telCliente+=" "+resoFornitore.getBeanFornitore().getCellulare();
                }
            }
        }
        
        parametri.put("11b",telCliente);
        
        parametri.put("12", "");
        parametri.put("13", "");
        
        parametri.put("14", "DOCUMENTO DI TRASPORTO");
        
        String codFiscale = "";
        String partIva = "";
        if(resoFornitore.getBeanFornitore().getPartitaIva() != null){
            partIva = resoFornitore.getBeanFornitore().getPartitaIva();
        }
        if(resoFornitore.getBeanFornitore().getCodiceFiscale() != null){
            codFiscale = resoFornitore.getBeanFornitore().getCodiceFiscale();
        }
        parametri.put("15a", partIva);
        parametri.put("15b", codFiscale);
        if(codice != null){
            parametri.put("16", resoFornitore.getCodice().toString()+"/R");
        }else{
            parametri.put("16", "");
        }
        if(resoFornitore.getDataReso() != null) {
            java.sql.Date dd = new java.sql.Date(resoFornitore.getDataReso().getTime());
            parametri.put("17", dd);
        } else {
            parametri.put("17", "");
        }
        
        if(listaProdotti != null) {
            HashMap mappaPagine = new HashMap();
            ArrayList listaPagine = new ArrayList();
            
            for (int i=0;i<this.listaProdotti.size();i++){
                if(i % 46 == 0 && i != 0){
                    listaPagine.add(mappaPagine);
                    mappaPagine = new HashMap();
                }
                
                BeanProdottoDett beanProdottoDett = (BeanProdottoDett)listaProdotti.get(i);
                mappaPagine.put("19" + i, beanProdottoDett.getCodice().toString());
                mappaPagine.put("20a" + i, beanProdottoDett.getDescrizioneBreve());
                String unitaMisura = "";
                if(beanProdottoDett.getUm() != null){
                    if(beanProdottoDett.getUm().intValue() == 0){
                        unitaMisura = "---";
                    }else{
                        if(beanProdottoDett.getUm().intValue() == 1){
                            unitaMisura = "PZ";
                        }else if(beanProdottoDett.getUm().intValue() == 2){
                            unitaMisura = "Cart";
                        }else if(beanProdottoDett.getUm().intValue() == 3){
                            unitaMisura = "Kg";
                        }else if(beanProdottoDett.getUm().intValue() == 4){
                            unitaMisura = "Lt";
                        }else if(beanProdottoDett.getUm().intValue() == 5){
                            unitaMisura = "Num";
                        }else if(beanProdottoDett.getUm().intValue() == 6){
                            unitaMisura = "Cm";
                        }else if(beanProdottoDett.getUm().intValue() == 7){
                            unitaMisura = "Mt";
                        }else if(beanProdottoDett.getUm().intValue() == 8){
                            unitaMisura = "Km";
                        }
                    }
                }else{
                    unitaMisura = "---";
                }
                parametri.put("21" + i, unitaMisura);
                parametri.put("22" + i, beanProdottoDett.getQuantita().toString());
                parametri.put("23" + i, beanProdottoDett.getPrezzoAcquistoUtile().toString());
                parametri.put("24" + i, "0");
                parametri.put("25" + i, arrotonda(new Double(beanProdottoDett.getPrezzoAcquistoUtile().doubleValue() * beanProdottoDett.getQuantita().doubleValue()), 2).toString());
                if(beanProdottoDett.getIva().toString().contains(".")) {
                    String pp = beanProdottoDett.getIva().toString().substring(0, beanProdottoDett.getIva().toString().indexOf("."));
                    parametri.put("26" + i, pp);
                } else {
                    parametri.put("26" + i, beanProdottoDett.getIva().toString());
                }
            }
            listaPagine.add(mappaPagine);
            parametri.put("pagine",listaPagine);
        }
        
        parametri.put("27", "");
        parametri.put("28", resoFornitore.getPeso().toString());
        parametri.put("29", resoFornitore.getColli().toString());
        
        parametri.put("30", "");
        parametri.put("31", "VISTA");
        parametri.put("32", "MITTENTE");
        parametri.put("33", "MERCE IN RESTITUZIONE");
        
        if(resoFornitore.getDataTrasporto() != null) {
            java.sql.Date dd = new java.sql.Date(resoFornitore.getDataTrasporto().getTime());
            parametri.put("34a", dd);
        } else {
            parametri.put("34aa", "");
        }
        if(resoFornitore.getOra() != null && resoFornitore.getMinuti() != null){
            parametri.put("34b", resoFornitore.getOra().toString() + ":" + resoFornitore.getMinuti());
        }else{
            parametri.put("34b", "");
        }
        parametri.put("35", resoFornitore.getNote());
        return parametri;
    }
    
    public Double arrotonda(Object obj,int precisione){
        Double valore=(Double)obj;
        Double valoreArr=new Double(0);
        double pot = Math.pow(10, precisione);
        double  v = valore.doubleValue() * pot;
        valoreArr = new Double(Math.round(v) / pot);
        return valoreArr;
    }
    
    public Integer getMinuti() {
        return minuti;
    }
    
    public void setMinuti(Integer minuti) {
        this.minuti = minuti;
    }
    
    public Integer getOra() {
        return ora;
    }
    
    public void setOra(Integer ora) {
        this.ora = ora;
    }
    
    public Double getImponibile() {
        return imponibile;
    }
    
    public void setImponibile(Double imponibile) {
        this.imponibile = imponibile;
    }
    
    public Double getIva() {
        return iva;
    }
    
    public void setIva(Double iva) {
        this.iva = iva;
    }
}
